应用程序配置参考

您可以通过如下方式配置您的 Kanzi 应用程序:

您可以在 onConfigure() 函数中配置您的 Kanzi 应用程序,而在 application.cfg 中,您无需重新编译应用程序甚至无需使用 C++ 应用程序即可配置某些参数。您在 application.cfg 中指定的配置会重写您在 onConfigure() 中指定的配置。

例如,在 application.cfg 中,您可以告诉 Kanzi 应用程序要加载哪个 kzb 文件、启用应用程序中的性能信息并设置您要使用多少个线程来加载应用程序资源。

请参阅配置应用程序

您可以使用这些应用程序配置设置。

加载
  BinaryName
ModuleNames
LoadingThreadCount
MaxPendingResources

性能
  ApplicationIdleState
MaximumFPS
PerformanceInfoLevel
性能信息位置
ProfilingCategoryFilter
主循环剖析样本缓冲区计数

图形缓存纹理大小
  GlyphCacheHeight
GlyphCacheWidth

优化
  图像初始化

Graphics card selection
  DeviceIdentifier
图形性能日志
  GraphicsLoggingEnabled
LogOpenGLExtensions
LogOpenGLInformation
LogSurfaceInformation

图形库
  GraphicsBackend
contextAPI

表面属性
  SurfaceBitsStencil
SurfaceBitsDepthBuffer
SurfaceBitsRed
SurfaceBitsGreen
SurfaceBitsBlue
SurfaceBitsAlpha
SurfaceBitsPadding
SurfaceSamplesAntialiasing
SwapBehavior
应用程序窗口位置和大小
  WindowX
WindowY
WindowWidth
WindowHeight
WindowOrder

应用程序窗口配置
  WindowStyle
  DefaultDisplayIndex
  WindowBufferCount

输入处理
  InputTransform
InputTranslation
InputDiscardPointer
InputDiscardTouch

Linux 上的输入事件设备
  InputEventDevice

加载

BinaryName

您可以设置当您启动 Kanzi 应用程序时,您的 Kanzi 应用程序要加载哪个 kzb 文件或配置文件。

请参阅使用 kzb 文件

对于 application.cfg BinaryName = "name"
对于 onConfigure() configuration.binaryName = "name";
值 (Value)
name 单个 kzb 文件或列出了您的 Kanzi 应用程序要加载的所有 kzb 文件的二进制配置文件的路径。
application.cfg 示例

#加载名为 MyApplication.kzb 的 kzb 文件。
BinaryName = "MyApplication.kzb"

#加载列出了
#您的 Kanzi 应用程序要加载的所有 kzb 文件的二进制配置文件 MyApplicationKzbs.cfg。
BinaryName = "MyApplication.kzb.cfg"

onConfigure() 示例

//加载名为 MyApplication.kzb 的 kzb 文件。
configuration.binaryName = "MyApplication.kzb";

//加载列出了
//您的 Kanzi 应用程序要加载的所有 kzb 文件的二进制配置文件 MyApplicationKzbs.cfg。
configuration.binaryName = "MyApplication.kzb.cfg";

ModuleNames

您可以设置在您启动 Kanzi 应用程序时 Kanzi 应用程序加载的插件。

对于 application.cfg ModuleNames= "names"
对于 onConfigure() configuration.moduleNames = names;
names 要加载的插件列表。
application.cfg 示例

# 加载插件 DLL 文件 MyPlugin1.dll 和 MyPlugin2.dll。
ModuleNames = "MyPlugin1; MyPlugin1"

onConfigure() 示例
//加载插件 DLL 文件 MyPlugin1.dll 和 MyPlugin2.dll。 
configuration.moduleNames = {"MyPlugin1", "MyPlugin1"};

LoadingThreadCount

当用户在具有多核处理器的环境中运行 Kanzi 应用程序时,Kanzi 会自动使用多个 CPU 内核将 kzb 文件中的 GPU 资源加载到 RAM 中。请参阅并行加载资源

GPU 资源 Kanzi 并行加载包括所有类型在内的纹理、着色器和网格。为将这些资源从 RAM 部署到 GPU 内存并加载预设件模板,Kanzi 始终使用主线程。请参阅图像和纹理最佳实践着色器最佳实践网格最佳实践

对于 application.cfg LoadingThreadCount = threads
对于 onConfigure() configuration.loadingThreadCount = threads;
threads 用于加载资源的 CPU 内核数量。默认值是 3。
application.cfg 示例
#禁止使用多个内核加载您的应用程序。
#使用主线程加载您的应用程序资源。
LoadingThreadCount = 0
#使用 6 个线程加载您的应用程序。
LoadingThreadCount = 5
onConfigure() 示例
//禁止使用多个内核加载您的应用程序。
//使用主线程加载您的应用程序资源。
configuration.loadingThreadCount = 0;
//使用 6 个线程加载您的应用程序。
configuration.loadingThreadCount = 5;

MaxPendingResources

您可以设置加载线程同时处理的最大资源数量。通过增大资源数量,您可以加快加载速度,但加载期间的峰值内存使用量也会增大,原因在于您可以在将资源部署到 GPU 中之前将更多的资源加载到内存中。

对于 application.cfg MaxPendingResources = resources
对于 onConfigure() configuration.maxPendingResources = resources;
resources 加载线程同时处理的最大资源数量。默认值为 0,请将最大资源数量设置为加载线程数量 +1。
application.cfg 示例
#将加载线程处理的最大资源数量设置为
#加载线程数量 +1。这是默认值。
MaxPendingResources = 0
#将加载线程处理的最大资源数量设置为
#20 个。
MaxPendingResources = 20
onConfigure() 示例
//将加载线程处理的最大资源数量设置为
//加载线程数量 +1。这是默认值。
configuration.maxPendingResources = 0;
//将加载线程处理的最大资源数量设置为
//20 个。
configuration.maxPendingResources = 20;

性能

ApplicationIdleState

如果没有输入、任务、定时器、动画,又或是应用程序中没有可以更新渲染的任何内容,Kanzi 会暂停主循环。请参阅应用程序空闲状态

当使用应用程序空闲状态时,请考虑下面这些使用案例:

对于 application.cfg ApplicationIdleState = value
对于 onConfigure() configuration.applicationIdleStateEnabled = value;
0 禁用应用程序空闲状态。
1 启用应用程序空闲状态。默认值。
application.cfg 示例
#禁用应用程序空闲状态。
ApplicationIdleState = 0
onConfigure() 示例
//禁用应用程序空闲状态。
configuration.applicationIdleStateEnabled = 0;

MaximumFPS

您可以设置最高帧速率,以限制每秒渲染帧数。

如果您的 Kanzi 应用程序正在显示动画,Kanzi 默认会调节 CPU 运行速度以获得最高的 FPS。如果没有显示任何动画,Kanzi 会将应用程序设置为空闲状态。因此,为了节省 CPU 资源和能耗,Kanzi 默认会将最高帧速率限制为 60 帧/秒。请使用应用程序配置来设置您的应用程序的最高帧速率。

请参阅 PerformanceInfoLevel

对于 application.cfg MaximumFPS = limit
对于 onConfigure() configuration.frameRateLimit = limit;
值 (Value)
limit 应用程序的最高帧速率(以每秒帧数为单位)。
application.cfg 示例
#将应用程序的最高帧速率设置为 32 帧/秒。
MaximumFPS = 32
#禁用限制。
MaximumFPS = 0
onConfigure() 示例
//将应用程序的最高帧速率设置为 32 帧/秒。
configuration.frameRateLimit = 32;
//禁用限制。
configuration.frameRateLimit = 0;

PerformanceInfoLevel

您可以允许显示性能 HUD (Performance HUD),以显示 Kanzi 应用程序的性能信息。使用性能 HUD (Performance HUD) 查看您的应用程序在目标设备上的运行方式并发现性能瓶颈。

性能 HUD (Performance HUD)为您的 Kanzi 应用程序显示性能信息:

您可以设置 性能 HUD (Performance HUD)Kanzi 应用程序窗口中的位置。请参阅 性能信息位置

请参阅 最佳实践

对于 application.cfg PerformanceInfoLevel = level
对于 onConfigure() configuration.performanceInfoLevel = ApplicationProperties::level;
level

性能信息的显示级别。

要禁止显示性能 HUD (Performance HUD)

  • application.cfg 中使用 0。默认值。
  • onConfigure() 中使用 PerformanceInfoLevelDisabled。默认值。

要允许显示每秒渲染帧数 (FPS):

  • application.cfg 中使用 1
  • onConfigure() 中使用 PerformanceInfoLevelFPS

要允许显示完整的 性能 HUD (Performance HUD)

  • application.cfg 中使用 2
  • onConfigure() 中使用 PerformanceInfoLevelFull
application.cfg 示例
#在 Kanzi 应用程序中启用完整的性能 HUD (Performance HUD)
PerformanceInfoLevel = 2
onConfigure() 示例
//在 Kanzi 应用程序中启用完整的性能 HUD (Performance HUD)
configuration.performanceInfoLevel = ApplicationProperties::PerformanceInfoLevelFull;)

性能信息位置

您可以设置 性能 HUD (Performance HUD)Kanzi 应用程序窗口中的位置。要在 Kanzi 应用程序窗口中查看 性能 HUD (Performance HUD),必须先启用此功能。请参阅 PerformanceInfoLevel

对于 application.cfg PerformanceInfoPositionX = positionX
PerformanceInfoPositionY = positionY
对于 onConfigure() configuration.performanceInfoProperties.positionX = positionX;
configuration.performanceInfoProperties.positionY = positionY;
值 (Value)
positionX 性能 HUD (Performance HUD) 左上角相对于 Kanzi 应用程序窗口左上角的水平位置。使用 0 定位 性能 HUD (Performance HUD) 到窗口左侧的距离。
positionY 性能 HUD (Performance HUD) 左上角相对于 Kanzi 应用程序窗口左上角的垂直位置。使用 0 定位 性能 HUD (Performance HUD) 到窗口顶部的距离。
application.cfg 示例
#定位 性能 HUD (Performance HUD)Kanzi 应用程序窗口的左边距为 100 个像素,
#上边距为 20 个像素。
PerformanceInfoPositionX = 100
PerformanceInfoPositionY = 20
onConfigure() 示例
//定位 性能 HUD (Performance HUD)Kanzi 应用程序窗口的
//左边距为 100 个像素,
//上边距为 20 个像素。
configuration.performanceInfoProperties.positionX = 100;
configuration.performanceInfoProperties.positionY = 20;

ProfilingCategoryFilter

您可以控制性能剖析类别的状态,它可用于对性能剖析程序进行分组,并设置要在性能 HUD (Performance HUD) 中显示的剖析程序。请参阅测量应用程序性能

对于 application.cfg ProfilingCategoryFilter = "category=state"
对于 onConfigure() configuration.profilingCategoryFilter = "category=state";
category

一个或多个剖析类别的名称以竖线 (|) 分隔。
要设置所有类别的状态,使用星号 (*)。

state
off 禁用性能剖析类别。
on 启用性能剖析类别。
show 启用性能剖析类别并在性能 HUD (Performance HUD) 中显示图形。
要使用此状态,启用完整的性能 HUD (Performance HUD)。请参阅 PerformanceInfoLevel
您可以使用此状态剖析 Kanzi 主循环中进行的任务性能。
请参阅在 性能 HUD (Performance HUD) 中显示性能测量图测量自定义主循环任务的性能

用分号分隔类别状态对 (;)。

application.cfg 示例
# 启用完整的性能 HUD (Performance HUD)。
PerformanceInfoLevel = 2
# 为主循环中运行的动画启用性能剖析,在性能 HUD (Performance HUD) 中显示性能图。
ProfilingCategoryFilter="MainLoopAnimation=show"
# 启用 MyFunctionProfiler 类别并禁用 MainLoopRendering 类别。
ProfilingCategoryFilter="MyFunctionProfiler=on;MainLoopRendering=off"
# 启用所有性能剖析类别。
ProfilingCategoryFilter="*=on"
# 启用类别 Generic 和 MyProfilingCategory。
ProfilingCategoryFilter="Generic|MyProfilingCategory=on"
# 启用资源剖析。请参阅测量资源加载和部署的时间。
ProfilingCategoryFilter="ResourceLoading=on"
onConfigure() 示例
//启用完整的性能 HUD (Performance HUD)。
configuration.performanceInfoLevel = ApplicationProperties::PerformanceInfoLevelFull;
//为主循环中运行的动画启用性能剖析,在性能 HUD (Performance HUD) 中显示性能图。
configuration.profilingCategoryFilter = "MainLoopAnimation=show";
# 启用 MyFunctionProfiler 类别并禁用 MainLoopRendering 类别。
configuration.profilingCategoryFilter="MyFunctionProfiler=on;MainLoopRendering=off"
//启用所有性能剖析类别。
configuration.profilingCategoryFilter = "*=on";
//启用类别 Generic 和 MyProfilingCategory。
configuration.profilingCategoryFilter = "Generic|MyProfilingCategory=on";
//启用资源剖析。请参阅测量资源加载和部署的时间。
configuration.profilingCategoryFilter = "ResourceLoading=on";

此表列出了 Kanzi 启动性能剖析类别和 Profiling build 中包含的剖析程序。

类别 (Category)配置名称剖析程序
应用程序初始化StartupInitializationm_initializationProfiler
默认资源注册StartupRegisterDefaultResourcesm_registerDefaultResourcesProfiler
图像初始化StartupInitializeGraphicsm_initializeGraphicsProfiler
GL 子系统初始化StartupInitializeGLm_initializeGLProfiler
启动 kzb 文件打开StartupOpenKzbm_openKzbProfiler
加载线程初始化StartupInitializeLoadingThreadsm_initializeLoadingThreadsProfiler
元数据注册StartupRegisterMetadatam_registerMetadataProfiler
插件加载StartupLoadPluginsm_loadPluginsProfiler
预设件加载StartupLoadPrefabm_loadPrefabProfiler
预设件安装StartupInstantiatePrefabm_instantiatePrefabProfiler
预设件附加StartupAttachPrefabm_attachPrefabProfiler
渲染器重置StartupResetRendererm_resetRendererProfiler
运行时资产注册StartupRegisterRuntimeAssetsm_registerRuntimeAssetsProfiler
   

此表列出了 Kanzi 主循环任务性能剖析类别和 Profiling build 中包含的剖析程序。

类别 (Category)配置名称HUD 中的标题剖析程序
动画 (Animations)
测量渲染动画的时间。
MainLoopAnimation主循环:动画m_animationProfiler
应用程序事件处理
测量收集和处理所有可用事件源的事件所花费的事件,如键盘、鼠标和其他可用操纵器。
MainLoopApplicationEvents主循环:应用程序事件m_applicationEventsProfiler
应用程序逻辑更新
测量花费在您提供的 Application::update 重写上的时间。
MainLoopAppUpdate主循环:应用程序更新m_appUpdateProfiler
用户提供的应用程序逻辑更新
测量花费在执行您提供的更新逻辑回调 Application::onUpdate 上的时间。
MainLoopUserUpdate主循环:用户更新m_userUpdateProfiler
图形事件处理
测量处理影响图形输出的事件花费的时间,如重设窗口大小。
MainLoopGraphicsEvents主循环:图形事件m_graphicsEventsProfiler
性能 HUD (Performance HUD)
测量渲染 性能 HUD (Performance HUD) 中的信息导致的开销。
MainLoopHUD主循环:HUDm_hudProfiler
输入事件处理
测量 InputManager 处理输入事件花费的时间,如键盘和鼠标事件。
MainLoopInput主循环:输入m_inputProfiler
布局
测量布局通道的性能。
MainLoopLayout主循环:布局m_layoutProfiler
渲染 (Rendering)
测量在 Application::renderOverride 中渲染屏幕所花费的时间。
MainLoopRendering主循环:渲染m_renderingProfiler
资源部署
测量处理异步任务部署队列花费的时间。
MainLoopResourceDeployment主循环:资源部署m_resourceDeploymentProfiler
资源管理器更新
测量 ResourceManager 处理负载和部署队列花费的时间。
MainLoopResourceManagerUpdate主循环:资源管理器更新m_resourceManagerUpdateProfiler
任务调度程序
测量执行添加到任务调度器中的任务花费的时间。
MainLoopTaskDispatcher主循环:任务调度程序m_taskDispatcherProfiler
任务调度器
测量执行添加到任务调度器中的定期任务花费的时间,如动画。
MainLoopTaskScheduler主循环:任务调度器m_taskSchedulerProfiler

主循环剖析样本缓冲区计数

您可以设置 Profiling build 包含的主循环性能剖析程序的样本缓冲区大小。请参阅测量 Kanzi Engine 的性能ProfilingCategoryFilter

对于 application.cfg MainLoopProfilingSampleBufferCount = samples
对于 onConfigure() configuration.mainLoopProfilingSampleBufferCount = samples
samples Kanzi 剖析构建中包含的主循环性能剖析程序的最大样本数。默认值是 1024。
application.cfg 示例
#将主循环性能剖析程序中的最大样本数设置为 3600。
MainLoopProfilingSampleBufferCount = 3600
onConfigure() 示例
//将主循环性能剖析程序的最大样本数设置为 3600。
configuration.mainLoopProfilingSampleBufferCount = 3600;

图形缓存纹理大小

当使用文本块 (Text Block) Kanzi 时,为字体与字号的每种组合创建图形缓存纹理。 您可以设置图形缓存纹理的高度和宽度,以便在图形缓存纹理填满时或者为了优化 Kanzi 应用程序的性能而调整图形缓存纹理的大小。

由于图形缓存纹理越大,使用的 VRAM 越多,因此请在设置最终大小之前尝试不同的大小。图形缓存纹理大小的上限取决于 GPU,但通常为 2048x2048 像素。图形缓存纹理的默认大小为 512x512 像素。

Kanzi 会将图形缓存纹理大小应用于所有图形缓存纹理。

对于 application.cfg GlyphCacheHeight = size
GlyphCacheWidth = size
对于 onConfigure() configuration.glyphCacheHeight = size;
configuration.glyphCacheWidth = size;
size 图形缓存纹理的大小(以像素为单位)。默认值是 512。
application.cfg 示例
#将图形缓存纹理的高度设置为 768 像素,将宽度设置为 1024 像素。
GlyphCacheHeight = 768
GlyphCacheWidth = 1024
onConfigure() 示例
//将图形缓存纹理的高度设置为 768 像素,将宽度设置为 1024 像素。
configuration.glyphCacheHeight = 768;
configuration.glyphCacheWidth = 1024;

优化

图像初始化

在 integrity_rcar_rwm_aarch64 平台上,您可以设置是否初始化应用程序图形。此方法只适用于最后阶段的优化,即当您想手动同步同时初始化的多个应用程序的启动时。

该配置控制图形驱动器和设备窗口管理器的初始化,以及显示的开关。如果该配置已票用,要启用 Kanzi 应用程序创建窗口,在相同流程中必须:

当图形初始化和此配置均禁用时,必须单独初始化每一个已禁用此设置的应用程序的图形。

对于 application.cfg InitializePlatform = value
对于 onConfigure() configuration.defaultWindowProperties.initializePlatform = value;
0 禁用图形初始化。
1 启用图形初始化。默认值。
application.cfg 示例
#禁用图形初始化
InitializePlatform = 0
onConfigure() 示例
//禁用图形初始化
configuration.defaultWindowProperties.initializePlatform = 0;

Graphics card selection

On the platforms that use the GBM windowing system you can set which graphics card you want your Kanzi application to use.

In application.cfg DeviceIdentifier = identifier
In onConfigure() configuration.defaultDesktopProperties.deviceIdentifier = identifier;
Value
identifier Identifier of the graphics card that you want your Kanzi application to use. Default value for GBM is /dev/dri/card0.
application.cfg example
# Sets Kanzi to use the graphics card at /dev/dri/card1.
DeviceIdentifier = /dev/dri/card1
onConfigure() example
// Sets Kanzi to use the graphics card at /dev/dri/card1.
configuration.defaultDesktopProperties.deviceIdentifier = "/dev/dri/card1";

图形性能日志

GraphicsLoggingEnabled

您可以在 Application::onConfigure() 函数中、application.cfg 中或使用命令行参数(如果您的目标支持命令行参数)启用 Kanzi,以便将应用程序的图形 API 调用打印到调试控制台。

在命令行使用:

对于 application.cfg GraphicsLoggingEnabled = value
对于 onConfigure() configuration.graphicsLoggingEnabled = value;
0 禁止记录图形 API 调用。默认值。
1 允许记录图形 API 调用。
application.cfg 示例
#允许记录图形 API 调用。
GraphicsLoggingEnabled = 1
onConfigure() 示例
//允许记录图形 API 调用。
configuration.graphicsLoggingEnabled = 1;

LogOpenGLExtensions

您可以启用 Kanzi 将应用程序启动时的图形相关扩展列表打印至调试控制台。要在 Android 设备上运行应用程序时获取此信息,请在应用程序代码中使用 logExtensions() 函数。

对于 application.cfg LogOpenGLExtensions = value
对于 onConfigure() configuration.extensionOutputEnabled = value;
0 禁用记录图形相关扩展。默认值。
1 启用记录图形相关扩展。
application.cfg 示例
# 启用记录图形相关扩展。
LogOpenGLExtensions = 1
onConfigure() 示例
//启用记录图形相关扩展。
configuration.extensionOutputEnabled = 1;

LogOpenGLInformation

您可以启用 Kanzi 将应用程序启动时的图形相关信息打印至调试控制台:

要在 Android 设备上运行应用程序时获取此信息,请在应用程序代码中使用 logOpenGLInformation() 函数。

对于 application.cfg LogOpenGLInformation = value
对于 onConfigure() configuration.informationOutputEnabled = value;
0 禁用记录图形相关信息。默认值。
1 启用记录图形相关信息。
application.cfg 示例
# 启用记录图形相关信息。
LogOpenGLInformation = 1
onConfigure() 示例
//启用记录图形相关信息。
configuration.informationOutputEnabled= 1;

LogSurfaceInformation

您可以启用 Kanzi 将应用程序启动时的图形相关属性打印至调试控制台:

对于 application.cfg LogSurfaceInformation = value
对于 onConfigure() configuration.propertyOutputEnabled = value;
0 禁用记录图形相关属性。默认值。
1 启用记录图形相关属性。
application.cfg 示例
# 启用记录图形相关属性。
LogSurfaceInformation = 1
onConfigure() 示例
//启用记录图形相关属性。
configuration.propertyOutputEnabled= 1;

图形库

在 Windows 操作系统中,您可以选择是否要在 Application::onConfigure() 函数中、application.cfg 中使用 OpenGL ES 或 OpenGL,或是否使用命令行参数(如您的目标支持的话)。

在命令行使用:

对于 application.cfgGraphicsBackend = type
onConfigure()configuration.defaultSurfaceProperties.type = type;
configuration.defaultSurfaceProperties.contextApi = contextAPI;
type

要使用 OpenGL ES 并将图形上下文设置为 EGL,请执行以下操作:

要使用 OpenGL 并将图形上下文设置为 WGL,请执行以下操作:

contextAPI

要使用 WGL,在 onConfigure() 中使用 KZS_GRAPHICS_CONTEXT_API_WGL

要使用 EGL,在 onConfigure() 中使用 KZS_GRAPHICS_CONTEXT_API_EGL

要使用 GLX,在 onConfigure() 中使用 KZS_GRAPHICS_CONTEXT_API_GLX

application.cfg 示例
# 为 OpenGL 渲染和 WGL 图形上下文设置表面目标。
GraphicsBackend = opengl
onConfigure() 示例
//为 OpenGL 渲染和 WGL 图形上下文设置表面目标。
configuration.defaultSurfaceProperties.type = KZS_SURFACE_TYPE_GL_ONLY;

表面属性

表面属性控制着 Kanzi 渲染的硬件加速图形表面的属性。它们控制着图像质量与渲染速度之间的关系。您设置的表面属性将被视为目标硬件的图形系统要匹配的请求。当给定的请求被视为上界时,下界或精确值将取决于平台。

表面属性的默认值取决于平台。您可以通过调用 kzsSurfaceGetDefaultProperties() 来获取这些默认值。

对于 application.cfg

SurfaceBitsStencil = stencil
SurfaceBitsDepthBuffer = buffer
SurfaceBitsRed = red
SurfaceBitsGreen = green
SurfaceBitsBlue = blue
SurfaceBitsAlpha = alpha
SurfaceBitsPadding = padding
SurfaceSamplesAntialiasing = anti
SwapBehavior = swap

对于 onConfigure()configuration.defaultSurfaceProperties.bitsStencil = stencil;
configuration.defaultSurfaceProperties.bitsDepthBuffer = buffer;
configuration.defaultSurfaceProperties.bitsColorR = red;
configuration.defaultSurfaceProperties.bitsColorG = green;
configuration.defaultSurfaceProperties.bitsColorB = blue;
configuration.defaultSurfaceProperties.bitsAlpha = alpha;
configuration.defaultSurfaceProperties.bitsPadding = padding;
configuration.defaultSurfaceProperties.antiAliasing = anti;
configuration.defaultSurfaceProperties.swapBehaviorCopy = swap;
configuration.defaultSurfaceProperties.priority = priority;
stencil模具缓冲区的大小(以比特为单位)。
buffer深度缓冲区的大小(以比特为单位)。
red红色通道的大小(以比特为单位)。
green绿色通道的大小(以比特为单位)。
blue蓝色通道的大小(以比特为单位)。
alpha阿尔法通道的大小(以比特为单位)。
padding添加到应用程序窗口的填充的大小(以比特为单位)。
设置填充大小仅在 QNX 操作系统上支持。
anti使用的抗锯齿样本数量。默认值是 0。
默认情况下,Kanzi Studio 预览 (Preview)Kanzi 应用程序播放器 (Application Player) 在 Windows 系统中应用抗锯齿采样数为 4 个。您可以配置希望两者使用的抗锯齿采样数量。请参阅 在 预览 (Preview) 和 应用程序播放器 (Application Player) 中设置抗锯齿
swap在交换缓冲区期间,是交换还是复制缓冲区。使用 1 进行复制,使用 0 进行交换,使用 KZS_SURFACE_PROPERTY_DONT_CARE 进行自动选择。默认值为 0(交换)。
priority允许创建带有优先级提示的 EGL 内容。默认值为 KZS_SURFACE_PROPERTY_DONT_CARE,值不会应用优先级。您只能在 onConfigure() 函数中设置优先级。
application.cfg 示例

#用于典型高速渲染应用程序的示例配置。
SurfaceBitsStencil = 1
SurfaceBitsDepthBuffer = 16
SurfaceBitsRed = 5
SurfaceBitsGreen = 6
SurfaceBitsBlue = 5
SurfaceBitsAlpha = 0
SurfaceSamplesAntialiasing = 0

#用于高图像质量应用程序的示例配置
SurfaceBitsStencil = 8
SurfaceBitsDepthBuffer = 24
SurfaceBitsRed = 8
SurfaceBitsGreen = 8
SurfaceBitsBlue = 8
SurfaceBitsAlpha = 8
SurfaceSamplesAntialiasing = 4

#在 Linux GBM DRM 窗口化系统中,创建一个具有阿尔法(GBM 格式 ARGB8888)的 32 位图面。
SurfaceBitsRed = 8
SurfaceBitsGreen = 8
SurfaceBitsBlue = 8
SurfaceBitsAlpha = 8

#在 Linux GBM DRM 窗口化系统中,创建一个不具有阿尔法的 32 位图面、
#一个 24 位颜色深度,和一个 8 位填充 (GBM 格式 XRGB8888)。
SurfaceBitsRed = 8
SurfaceBitsGreen = 8
SurfaceBitsBlue = 8
SurfaceBitsAlpha = 0 SurfaceBitsPadding = 8

onConfigure() 示例

//用于典型高速渲染应用程序的示例配置。
configuration.defaultSurfaceProperties.bitsStencil = 1;
configuration.defaultSurfaceProperties.bitsDepthBuffer = 16;
configuration.defaultSurfaceProperties.bitsColorR = 5;
configuration.defaultSurfaceProperties.bitsColorG = 6;
configuration.defaultSurfaceProperties.bitsColorB = 5;
configuration.defaultSurfaceProperties.bitsAlpha = 0;
configuration.defaultSurfaceProperties.antiAliasing = 0;

//用于高图像质量应用程序的示例配置。
configuration.defaultSurfaceProperties.bitsStencil = 8;
configuration.defaultSurfaceProperties.bitsDepthBuffer = 24;
configuration.defaultSurfaceProperties.bitsColorR = 8;
configuration.defaultSurfaceProperties.bitsColorG = 8;
configuration.defaultSurfaceProperties.bitsColorB = 8;
configuration.defaultSurfaceProperties.bitsAlpha = 8;
configuration.defaultSurfaceProperties.antiAliasing = 4;

//在 Linux GBM DRM 窗口化系统中,创建一个具有阿尔法(GBM 格式 ARGB8888)的 32 位图面。
configuration.defaultSurfaceProperties.bitsColorR = 8;
configuration.defaultSurfaceProperties.bitsColorG = 8;
configuration.defaultSurfaceProperties.bitsColorB = 8;
configuration.defaultSurfaceProperties.bitsAlpha = 8;

//在 Linux GBM DRM 窗口化系统中,创建一个不具有阿尔法的 32 位图面、
//一个 24 位颜色深度,和一个 8 位填充(GBM_格式_XRGB8888)。
configuration.defaultSurfaceProperties.bitsColorR = 8;
configuration.defaultSurfaceProperties.bitsColorG = 8;
configuration.defaultSurfaceProperties.bitsColorB = 8;
configuration.defaultSurfaceProperties.bitsAlpha = 0; configuration.defaultSurfaceProperties.bitsPadding = 8;

应用程序窗口位置和大小

您可以设置 Kanzi 应用程序在屏幕上相对于屏幕左上角的位置,并以像素为单位设置应用程序窗口的大小。窗口的默认大小为 640x480 像素并位于设备屏幕的中心。

要使用应用程序具有固定大小、可调整大小、全屏或无边框,请参阅 WindowStyle

要了解如何设置应用程序窗口出现的默认显示,请参阅 DefaultDisplayIndex

对于 application.cfgWindowX = positionX
WindowY = positionY
WindowWidth = width
WindowHeight = height
WindowOrder = order
对于 onConfigure()configuration.defaultWindowProperties.x = positionX;
configuration.defaultWindowProperties.y = positionY;
configuration.defaultWindowProperties.width = width;
configuration.defaultWindowProperties.height = height;
configuration.defaultWindowProperties.order = order;
值 (Value)
positionX应用程序窗口左上角相对于屏幕左上角的水平位置(以像素为单位)。使用 0 将窗口放在设备屏幕的左侧。
positionY应用程序窗口左上角相对于屏幕左上角的垂直位置(以像素为单位)。使用 0 将窗口放在设备屏幕的顶部。
width窗口宽度(以像素为单位)。
height窗口高度(以像素为单位)。
order应用程序窗口的 Z 顺序。值取决于目标平台。默认值为 NativeWindowProperties::WindowPositionUnspecified,值不会应用顺序。
application.cfg 示例
#将宽度设置为 1280 像素,将高度设置为 720 像素,并将其放在与顶部相距 100 像素、
#与设备屏幕的左侧相距 1 像素处。
WindowWidth = 1280
WindowHeight = 720
WindowX = 100
WindowY = 1
#将应用程序窗口放在设备屏幕的左上角。
WindowX = 0
WindowY = 0
#在 Windows 上,将应用程序窗口放在其他窗口的顶部。
WindowOrder = 0
onConfigure() 示例
//将宽度设置为 1280 像素,将高度设置为 720 像素,并将其放在与顶部相距 100 像素、
//与设备屏幕的左侧相距 1 像素处。
configuration.defaultWindowProperties.width = 1280;
configuration.defaultWindowProperties.height = 720; configuration.defaultWindowProperties.x = 100; configuration.defaultWindowProperties.y = 1;
//将应用程序窗口放在设备屏幕的左上角。
configuration.defaultWindowProperties.x = 0;
configuration.defaultWindowProperties.y = 0;
//在 Windows 上,将应用程序窗口放在其他窗口之上。
configuration.defaultWindowProperties.order = 0;

应用程序窗口配置

WindowStyle

您可以设置 Kanzi 应用程序窗口的样式。除了允许用户重设边框大小的默认窗口以外,您还可以将 Kanzi 应用程序设置为在无边框的窗口、固定大小的窗口和占据整个设备屏幕的窗口中启动。

要了解如何设置应用程序窗口的位置和大小,请参阅 应用程序窗口位置和大小

对于 application.cfgWindowStyle = "style"
对于 onConfigure()configuration.defaultWindowProperties.style = style;
值 (Value)
style

要设置用户不能重设大小、没有边框或任何其他装饰的窗口:

要设置用户不能重设大小的窗口:

要设置占据整个设备屏幕的窗口:

要设置用户能重设大小的窗口:

application.cfg 示例

#在占据整个设备屏幕的窗口中启动应用程序。
WindowStyle = "fullscreen"

onConfigure() 示例
//在占据整个设备屏幕的窗口中启动应用程序。
configuration.defaultWindowProperties.style = KZS_WINDOW_STYLE_FULL_SCREEN;

DefaultDisplayIndex

当在具有不只一个显示屏的系统上以全屏模式运行您的 Kanzi 应用程序时,您可以设置 Kanzi 应用程序窗口的默认显示位置。

要了解如何将应用程序窗口设置为全屏,请参阅 WindowStyle

对于 application.cfgDefaultDisplayIndex = index
对于 onConfigure()configuration.defaultWindowProperties.defaultDisplayIndex = index;
值 (Value)
index显示屏的索引编号。默认值为 0。
application.cfg 示例
#将第二个显示屏设置为全屏应用程序窗口的默认显示屏。
DefaultDisplayIndex = 1
onConfigure() 示例
//将第二个显示屏设置为全屏应用程序窗口的默认显示屏。
configuration.defaultWindowProperties.defaultDisplayIndex = 1;

WindowBufferCount

如果您目标设备的窗口设置支持设置窗口缓冲区数量,则可以设置 Kanzi 应用程序窗口使用的本机窗口缓冲区数量。例如,Renesas 窗口管理器和 QNX Screen 支持设置窗口缓冲区数量。

对于 application.cfgWindowBufferCount = value
对于 onConfigure()configuration.defaultWindowProperties.bufferCount = value;
valueKanzi 应用程序窗口使用的本机窗口缓冲区数量。默认情况下,该值是 0,并设置 Kanzi 使用目标设备本机窗口化系统提供的默认值。
application.cfg 示例

#将 Kanzi 应用程序窗口使用的本机窗口缓冲区数量设置为 3。
WindowBufferCount = 3

onConfigure() 示例
//将 Kanzi 应用程序窗口使用的本机窗口缓冲区数量设置为 3。
configuration.defaultWindowProperties.bufferCount = 3;

输入处理

您可以定义应用程序如何处理触摸和指针输入。当在设备上运行您的应用程序时,您可以设置应用程序是响应设备指针、使用触摸屏还是同时支持这两种操作。还可以设置输入事件坐标的转换矩阵。

InputTransform

您可以设置输入坐标的转换矩阵。转换只影响输入事件坐标,不影响 Kanzi 应用程序屏幕的方向。例如,使用此功能根据您应用程序的屏幕,旋转触摸屏。

对于 application.cfgInputTransform = transformation
对于 onConfigure()configuration.defaultEventSourceProperties.transformation = transformation;
transformation触摸屏幕的转换矩阵。
application.cfg 示例

#将大小为 1280x720 像素的触摸屏幕旋转 180 度。
InputTransform = -1, 0, 0, 0, -1, 0, 1280, 720, 1

onConfigure() 示例
//将大小为 1280x720 像素的触摸屏幕旋转 180 度。
configuration.defaultEventSourceProperties.transformation = Matrix3x3::createTranslation(1280, 720) * Matrix3x3::createRotationInDegrees(180.0f);
 

示例使用此等式计算变换矩阵:

InputTranslation

您可以设置 Kanzi 如何变换指针和触摸事件。

对于 application.cfgInputTranslation = translation
对于 onConfigure()configuration.defaultEventSourceProperties.translation = translation;
translation

对指针和触摸事件的变换。

不应用任何变换:

要将指针事件变换为触摸事件:

将指针事件变换为触摸事件,并保留指针事件:

要将触摸事件变换为指针事件:

要将触摸事件变换为指针事件,并保留触摸事件:

application.cfg 示例

# 将指针事件变换为触摸事件。
InputTranslation = PointerToTouch

onConfigure() 示例
//将指针事件变换为触摸事件。
configuration.defaultEventSourceProperties.translation = KZS_INPUT_TRANSLATE_POINTER_TO_TOUCH;

InputDiscardPointer

您可以设置应用程序是否响应设备指针。

对于 application.cfgInputDiscardPointer = value
对于 onConfigure()configuration.defaultEventSourceProperties.discardPointerEvents = value;
value
0不忽略指针输入。默认值。
1忽略指针输入。
application.cfg 示例

# 忽略指针输入。
InputDiscardPointer = 1

onConfigure() 示例
//忽略指针输入。
configuration.defaultEventSourceProperties.discardPointerEvents = 1;

InputDiscardTouch

您可以设置应用程序是否响应触摸输入。

对于 application.cfgInputDiscardTouch = value
对于 onConfigure()configuration.defaultEventSourceProperties.discardTouchEvents = value;
value
0不忽略触摸输入。默认值。
1忽略触摸输入。
application.cfg 示例

# 忽略触摸输入。
InputDiscardTouch = 1

onConfigure() 示例
//忽略触摸输入。
configuration.defaultEventSourceProperties.discardTouchEvents = 1;

Linux 上的输入事件设备

如果本地窗口系统不提供输入设备处理,您可以在 Linux 端口配置 Kanzi 听从的输入事件设备。通过这种方式,Kanzi可以直接听从来自操作系统提供的输入事件设备的事件。
例如,在 Vivante fbdev 和 WSEGL 端口中,您可以配置 Kanzi 听从的输入事件设备。在 X11 和 Wayland 端口中,本地窗口系统处理输入设备。

Kanzi 默认听从 /dev/input 目录中名为 eventN 的所有输入事件设备,其中 N 是整数。

对于 application.cfgInputEventDevice = path
对于 onConfigure()configuration.defaultEventSourceProperties.inputEventDevice = path;
path一个或多个输入事件设备的完整路径。用分号分隔几个路径的列表。
application.cfg 示例
#听从来自一个输入事件设备的事件。
InputEventDevice = "/dev/input/event1"
#听从来自两个输入事件设备的事件。
InputEventDevice = "/dev/input/event0;/dev/input/event1"
#禁止听从来自输入事件设备的事件。
InputEventDevice = "none"
onConfigure() 示例
//听从来自一个输入事件设备的事件。
configuration.defaultEventSourceProperties.inputEventDevice = "/dev/input/event1";
//听从来自两个输入事件设备的事件。
configuration.defaultEventSourceProperties.inputEventDevice = "/dev/input/event0;/dev/input/event1";
//禁止听从来自输入事件设备的事件。
configuration.defaultEventSourceProperties.inputEventDevice = "none";

另请参阅

配置应用程序

最佳实践

并行加载资源

使用 kzb 文件